home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 526-550 / disk_540 / parm / parm_src.lzh / Misc.c < prev    next >
C/C++ Source or Header  |  1991-07-03  |  5KB  |  222 lines

  1. /*
  2.  *    Misc.c - Copyright © 1991 by S.R. & P.C.
  3.  *
  4.  *    Created:    04 Apr 1991  17:39:43
  5.  *    Modified:    03 Jul 1991  21:17:21
  6.  *
  7.  *    Make>> make
  8.  */
  9.  
  10. #include "ParMBase.h"
  11.  
  12. extern struct ExecBase *SysBase;
  13.  
  14. static char *StrErr[] = {
  15.     "No default dir",
  16.     "Object in use",
  17.     "Object already exists",
  18.     "Directory not found",
  19.     "Object not found",
  20.     "Bad stream name",
  21.     "Object too large",
  22.     "Unknown error",
  23.     "Unknown action",
  24.     "Stream name component invalid",
  25.     "Invalid lock",
  26.     "Wrong object type",
  27.     "Disk not validated",
  28.     "Disk write protected",
  29.     "Attempt to rename across devices",
  30.     "Directory not empty",
  31.     "Too many levels",
  32.     "Device not mounted",
  33.     "Seek error",
  34.     "Comment too big",
  35.     "Disk full",
  36.     "Object delete protected",
  37.     "Object write protected",
  38.     "Object read protected",
  39.     "Not a dos disk",
  40.     "No disk in drive"
  41. };
  42.  
  43.  
  44. /* Warn user of a load error */
  45.  
  46. char *DosError(long err)
  47. {
  48.     char *str;
  49.     short e = (short)err;
  50.  
  51.     switch(e) {
  52.     case 0:
  53.         str = "Error 0, no error!";
  54.         break;
  55.     case ERROR_NO_FREE_STORE:
  56.         str = "Not enough memory";
  57.         break;
  58.     case ERROR_TASK_TABLE_FULL:
  59.         str = "Task table full";
  60.         break;
  61.     case ERROR_LINE_TOO_LONG:
  62.         str = "Line too long";
  63.         break;
  64.     case ERROR_FILE_NOT_OBJECT:
  65.         str = "File is not an object module";
  66.         break;
  67.     case ERROR_INVALID_RESIDENT_LIBRARY:
  68.         str = "Invalid resident library";
  69.         break;
  70.     default:
  71.         if (e>=201 && e<=226)
  72.             str = StrErr[e-201];
  73.         else
  74.             str = "Unknown error";
  75.     }
  76.     return str;
  77. }
  78.  
  79.  
  80. char *StrIoErr(void)
  81. {
  82.     return DosError(IoErr());
  83. }
  84.  
  85.  
  86. /*****  make (and allocate) a copy of the passed string *****/
  87.  
  88. char *CopyStr(char *str)
  89. {
  90.     struct ParMBase *ParMBase;
  91.     char *newstr;
  92.  
  93.     if (newstr = AllocMem(strlen(str)+1, MEMF_PUBLIC))
  94.         strcpy(newstr, str);
  95.     return newstr;
  96. }
  97.  
  98.  
  99. void FreeStr(char *str)
  100. {
  101.     struct ParMBase *ParMBase;
  102.  
  103.     if (str)
  104.         FreeMem(str, strlen(str)+1);
  105. }
  106.  
  107.  
  108. void NewMinList(struct MinList *MinList)
  109. {
  110.     struct ParMBase *ParMBase;
  111.  
  112.     MinList->mlh_Head = (struct MinNode *)&MinList->mlh_Tail;
  113.     MinList->mlh_Tail = NULL;
  114.     MinList->mlh_TailPred = (struct MinNode *)MinList;
  115. }
  116.  
  117.  
  118. ULONG MakeMenuShortCut(struct Menu *M, ULONG c)
  119. {
  120.     struct ParMBase *ParMBase;
  121.     struct MenuItem *MI, *SI;
  122.     short menu, item, sub;
  123.     USHORT Code;
  124.  
  125.     c = Toupper(c);
  126.     for( menu=0 ; M ; M=M->NextMenu, menu++ ) {
  127.         for( MI=M->FirstItem, item=0 ; MI ; MI=MI->NextItem, item++ ) {
  128.             if (SI=MI->SubItem) {
  129.                 for( sub=0 ; SI ; SI=SI->NextItem, sub++ ) {
  130.                     if ((SI->Flags & COMMSEQ) && c == Toupper(SI->Command)) {
  131.                         SI->NextSelect = MENUNULL;
  132.                         return (sub<<11)|(item<<5)|menu;
  133.                     }
  134.                 }
  135.             }
  136.             else if ((MI->Flags & COMMSEQ) && c == Toupper(MI->Command)) {
  137.                 MI->NextSelect = MENUNULL;
  138.                 return (NOSUB<<11)|(item<<5)|menu;
  139.             }
  140.         }
  141.     }
  142.     return MENUNULL;
  143. }
  144.  
  145.  
  146. void InitDefaults(struct ParMConfig *PCfg)
  147. {
  148.     struct ParMBase *ParMBase;
  149.  
  150.     strcpy(PCfg->CmdWindow, DEFAULT_CMD_WINDOW);
  151.     strcpy(PCfg->ShellWindow, DEFAULT_SHELL_WINDOW);
  152.     strcpy(PCfg->ShellCmd, DEFAULT_SHELL_CMD);
  153.     strcpy(PCfg->WaitCmd, DEFAULT_WAIT_CMD);
  154.     strcpy(PCfg->TmpDir, DEFAULT_TMP_DIR);
  155.     PCfg->DefaultStack = 4000;
  156. }
  157.  
  158.  
  159. /* See if some wb messages have been replied, and free them */
  160.  
  161. void FreeRepliedWBMessages(void)
  162. {
  163.     struct ParMBase *ParMBase;
  164.     struct Extended_WBStartup *EWBS;
  165.     
  166.     Forbid();
  167.     while(EWBS = (struct Extended_WBStartup *)GetMsg(&ParMBase->pb_MsgPort)) {
  168.         ParMBase->pb_MsgCnt--;
  169.         WBFree(EWBS);
  170.     }
  171.     Permit();
  172. }
  173.  
  174.  
  175. long IsHidden(struct Window *W)
  176. {
  177.     long Hidden = FALSE;
  178.     struct Layer *L1, *L2;
  179.  
  180.     LockLayerInfo(&W->WScreen->LayerInfo);
  181.     L1 = WhichLayer(&W->WScreen->LayerInfo, W->LeftEdge, W->TopEdge);
  182.     L2 = WhichLayer(&W->WScreen->LayerInfo, W->LeftEdge + W->Width-1, W->TopEdge + W->Height-1);
  183.     if (W != (struct Window *)L1->Window || W != (struct Window *)L2->Window)
  184.         Hidden = TRUE;
  185.     UnlockLayerInfo(&W->WScreen->LayerInfo);
  186.     return Hidden;
  187. }
  188.  
  189.  
  190. /***** get CLI window ptr *****/
  191.  
  192. struct Window *GetWindow(void)
  193. {
  194.     struct Process *pp;
  195.     struct InfoData *infodata;
  196.     struct Window *win;
  197.     long args[7];
  198.  
  199.     pp = (struct Process *)SysBase->ThisTask;
  200.     infodata = AllocMem((long) sizeof(struct InfoData), MEMF_CLEAR | MEMF_PUBLIC);
  201.     args[0] = (long)infodata >> 2;
  202.     SendPacket(ACTION_DISK_INFO, args, (struct MsgPort *)pp->pr_ConsoleTask);
  203.     win = (struct Window *)infodata->id_VolumeNode;
  204.     FreeMem(infodata, (long)sizeof(struct InfoData));
  205.     return win;
  206. }
  207.  
  208.  
  209. struct IORequest *CreateExtIO(struct MsgPort *ioReplyPort, long size)
  210. {
  211.     struct IORequest *ioReq;
  212.  
  213.     if (ioReq = AllocMem(size, MEMF_PUBLIC|MEMF_CLEAR)) {
  214.         ioReq->io_Message.mn_Node.ln_Type = NT_MESSAGE;
  215.         ioReq->io_Message.mn_Length = size;
  216.         ioReq->io_Message.mn_ReplyPort = ioReplyPort;
  217.     }
  218.     return ioReq;
  219. }
  220.  
  221.  
  222.